

#include "Frame.h"
#include "Strategy.h"
#include "Snake.h"
#include "Log.h"
#include "Net.h"
#include "Platform.h"

#include "cs_login.pb.h"

#include <stdlib.h>
#include <time.h>
#ifdef _WIN32
#include <windows.h>
#else
#endif

class CNetServerTest : public CNet
{

public:
    CNetServerTest() :m_iRecvStep(1) {}
    ~CNetServerTest() {}
public:
    /**
     * @brief 收到消息事件
     */
    virtual bool OnPacket(const int iSocket, char *pData, int iLen)
    {
        char csBuff[1024];
        switch (m_iRecvStep)
        {
        case 1:
            cs::LoginReq csLoginReq;
            csLoginReq.ParseFromArray(pData, iLen);
            LOG_DBG("Server Recv:%s", csLoginReq.DebugString().c_str());

            cs::LoginRes csLoginRes;
            csLoginRes.set_welcomemessage("welcome to lost world");
            csLoginRes.SerializeToArray(csBuff, sizeof(csBuff));
            Send(iSocket, csBuff, csLoginRes.ByteSize());
            LOG_DBG("Server Send:%s", csLoginRes.DebugString().c_str());
            break;
        }
        ++m_iRecvStep;
        return CNet::OnPacket(iSocket, pData, iLen);
    }
private:
    int m_iRecvStep;
};

// class CNetClientTest : public CNet
// {
// public:
//     CNetClientTest() :m_iSocket(0), m_iRecvStep(0) {}
//     ~CNetClientTest() {}
// public:
//     /**
//      * @brief 收到连接事件
//      */
//     virtual bool OnConnect(const int iSocket)
//     {
//         m_iSocket = iSocket;
//         return CNet::OnConnect(iSocket);
//     }
//     /**
//      * @brief 收到消息事件
//      */
//     virtual bool OnPacket(const int iSocket, char *pData, int iLen)
//     {
//         cs::LoginRes csLoginRes;
//         csLoginRes.ParseFromArray(pData, iLen);
//         LOG_DBG("Client OnRecv:%s", csLoginRes.DebugString().c_str());
//         return CNet::OnPacket(iSocket, pData, iLen);
//     }
// public:
//     int m_iSocket;
//     int m_iRecvStep;
// };

int main1(void)
{
    //     CServerNet cServerNet;
    //     cServerNet.Init();
    //     cServerNet.AddListen(NULL, 10812);
    //     cServerNet.AddConnect("127.0.0.1", 10812);
    // 
    // 
    //     while (true)
    //     {
    //         cServerNet.Polling(-1);
    //     }
// 
//     CNetServerTest cServer;
//     cServer.Init();
//     cServer.AddListen("127.0.0.1", 10812);
// 
//     CNetClientTest cClient;
//     cClient.Init();
//     cClient.AddConnect("127.0.0.1", 10812);
// 
//     int iStep = 0;
//     int iCount = 0;
//     while (true)
//     {
//         iCount += cServer.Polling(1);
//         iCount += cClient.Polling(1);
//         if (0 < iCount)
//         {
//             Sleep(1);
//         }
//         iCount = 0;
// 
//         if (cClient.m_iSocket != 0)
//         {
//             char csBuff[1024];
// 
//             switch (iStep)
//             {
//             case 0:
//             {
//                 cs::LoginReq csLoginReq;
//                 csLoginReq.set_id(10086);
//                 csLoginReq.set_name("China move");
//                 csLoginReq.set_passward("10086-zgyd");
//                 csLoginReq.SerializeToArray(csBuff,sizeof(csBuff));
//                 cClient.Send(cClient.m_iSocket, csBuff, csLoginReq.ByteSize());
//                 LOG_DBG("Client Send:%s", csLoginReq.DebugString().c_str());
//                 break;
//             }
//             default:
//                 break;
//             }
// 
//             ++iStep;
//         }
//     }

    CPlatform::Instance().Init();
    CPlatform::Instance().Run(0, NULL);

    return 0;

    /*
    srand((unsigned int)time(NULL));
    LOG_DBG("begin");
    CFrame &cFrame = CFrame::Instance();
    CSnake cSnake(&cFrame);
    CStrategy cMyStrategy(cFrame,cSnake);

    cFrame.Init(&cMyStrategy);
    cFrame.Run();
    LOG_DBG("end");*/
    return 0;
}
